import _ from 'lodash'
import { typeOf } from './assist'

/** 
 * @description 是否为 字符串类型
*/
export function isString(string) {
  return typeOf(string) === 'string'
}

/** 
 * @description 是否为 数组类型
*/
export function isArray(array) {
  return Array.isArray(array) && typeOf(array) === 'array'
}

/** 
 * @description 是否不为 数组类型
*/
export function isNotArray(array) {
  return !isArray(array)
}

/** 
 * @description 是否为 数字类型
*/
export function isNumber(number) {
  return typeOf(number) === 'number' && !isNaN(number)
}

/** 
 * @description 是否不为 数字类型
*/
export function isNotNumber(number) {
  return !isNumber(number)
}

/** 
 * @description 是否为 布尔类型
*/
export function isBoolean(boolean) {
  return typeOf(boolean) === 'boolean'
}

/** 
 * @description 是否为 对象类型
*/
export function isObject(object) {
  return object && typeOf(object) === 'object'
}

/** 
 * @description 是否为 函数类型
*/
export function isFunction(func) {
  return func && typeOf(func) === 'function'
}

/** 
 * @description 是否不为 函数类型
*/
export function isNotFunction(func) {
  return !isFunction(func)
}

/**
 * @description 是否为 函数类型
 */
export function isAsyncFunction(func) {
  return func && typeOf(func) === 'asyncFunction'
}
/**
 * @description 是否为 undefined
*/
export function isUndefined(value) {
  return typeOf(value) === 'undefined'
}

/**
 * @description 是否不为 undefined
*/
export function isNotUndefined(value) {
  return !isUndefined(value)
}

/**
 * @description 是否为 null
 */
export function isNull(value) {
  return typeOf(value) === 'null'
}

/**
 * @description 是否为 空
*/
export function isEmpty(value) {
  return _.isEmpty(value)
}

/**
 * @description 是否不为 空
*/
export function isNotEmpty(value) {
  return !isEmpty(value)
}

/**
 * @description 是否为 DOM元素
*/
export function isElement(element) {
  return _.isElement(element)
}

/**
 * @description 是否相等
*/
export function isEqual(leftData, rightData) {
  return _.isEqual(leftData, rightData)
}

/**
 * @description 是否不相等
*/
export function isNotEqual(leftData, rightData) {
  return !isEqual(leftData, rightData)
}


/**
 * @description 深拷贝
*/
export function cloneDeep(data) {
  return _.cloneDeep(data)
}

export function isPlanObject(data) {
  return _.isPlainObject(data)
}

/**
 * @description 是否为 false
*/
export function isFalse(value) {
  return value === false
}

/**
 * @description 是否为 true
*/
export function isTrue(value) {
  return value === true
}

export function isNotTrue(value) {
  return !isTrue(value)
}

/**
 * @description 是否为 虚值
*/
export function isFalsy(value) {
  return !value
}